# encoding=utf-8

"""EnvRepairService.py
    - 主要用于补全代码的运行环境，有空再写

    - 主要想实现启动的时候， 系统自检
    - 失败就python调用seg_cuda部分自动下载需要的环境，编译到指定位置
    - 同时部分代码还需要很多字体的部分，也希望在这个服务中实现补全

    本功能的实现采用责任链模式，只有在所有的环境验证通过后，才返回正常（所以此模块应该可选执行)

    EnvResolverBase:
        - 具体的环境配置基类
        - 后续继承并实现方法

    RepositoryBase, EnvRepository：
        - 责任链模式的封装
"""


class EnvResolverBase:
    def resolve(self, **kwargs):
        raise NotImplementedError

    def run(self, **kwargs) -> (bool, str):
        return self.resolve(**kwargs)


class RepositoryBase:
    def resolve(self, **kwargs):
        raise NotImplementedError

    def add(self, o: object):
        raise NotImplementedError

    def next(self, **kwargs):
        raise NotImplementedError

    def run(self, **kwargs) -> (bool, str):
        return self.resolve(**kwargs)


class EnvRepository(RepositoryBase):
    _resolver: EnvResolverBase
    _repository: RepositoryBase

    def __init__(self, o: EnvResolverBase):
        self._resolver = o

    def add(self, o: object):
        self._repository = o

    def next(self, **kwargs) -> (bool, str):
        return self._repository.resolve(**kwargs)

    def resolve(self, **kwargs) -> (bool, str):
        result = self._resolver.resolve(** kwargs)
        if not result[0]:
            return result
        return self.next(**kwargs)


